/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.synjones.zeus.model;

/**
 * @author
 */
public enum StatusInfo {
    _0000("0000", "验证成功"), _0001("0001", "验证成功获取用户关联信息错误"), _0002("0002", "密码2次验证失败,5分钟内连续三次验证失败账户将被锁定24小时"), _0003("0003", "账户已锁定,请联系管理员"), _0004("0004", "账户或密码错误"), _0005("0005", "此账户无权限"), _0006("0006", "此账户不存在"), _0007("0007", "身份信息不存在"),
    _1000("0000", "开餐时间查询成功"), _1001("1001", "开餐时间查询失败"), _1007("1007", "该终端不存在"),
    _1100("0000", "更新餐次时间成功"), _1101("1101", "更新餐次时间失败"), _1102("0000", "授权成功"), _1103("1103", "授权失败"),_1104("1104", "更新早餐人工开餐时与午餐的时间区间重叠"),_1105("1105", "更新午餐人工开餐时与早餐的时间区间重叠"),_1106("1106", "更新午餐人工开餐时与晚餐的时间区间重叠"),_1107("1107", "更新晚餐人工开餐时与午餐的时间区间重叠"),_1108("1108", "更新晚餐人工开餐时与宵夜的时间区间重叠"),_1109("1109", "更新宵夜人工开餐时与晚餐的时间区间重叠"),_1110("1110", "更新宵夜人工开餐时不能跨天"),
    _2000("0000", "支付成功"), _2001("2001", "支付失败"), _2002("2002", "已就餐"),_2003("2003","所在群组未到开餐时间"),
    _3000("0000", "获取用户信息成功"), _3001("3001", "获取用户信息失败"), _3002("3002", "卡状态异常"), _3003("3003", "卡已挂失"), _3004("3004", "卡已冻结"),
    _4000("0000", "查询密码正确"), _4001("4001", "查询密码错误"),
    _5000("5000", "获取图片成功"), _5001("5001", "获取图片失败"),
    _4005("4005", "用户登录信息异常"), _4006("4006", "支付商户不存在"), _4007("4007", "用户信息异常"), _4008("4008", "商户信息异常"), _4009("4009", "学校信息异常"),
    _4010("4010", "学校商户支付工具信息异常"), _4011("4011", "学校商户支付工具信息不存在"), _4012("4012", "学校不存在"), _4013("4013", "金额格式输入有误，格式应类似[0.00或100]"),
    _4014("4014", "账号或密码错误"), _4015("4015", "该终端未注册"), _4016("4016", "该终端已禁用"),
    _6000("6000", "获取系统时间成功"),_6001("6001", "修改失败"),
    _6100("6100", "本地配置获取成功"),_6101("6101", "本地配置获取成功失败"),
    _7000("7000", "卡信息获取失败"), _7001("7001", "卡信息获取成功"), _7002("7002", "未查询到数据"),
    _8000("8000", "不是我收集信息成功"), _8001("8001", "不是我收集信息失败"),
    _5010("5010", "系统繁忙"), _5020("5020", "爬取失败"), _5030("5030", "您的账号在别的地方登陆，请重新登陆"), _5040("5040", "空间不足，收藏失败"),
    _9000("9000", "其他错误"),
    _9001("9001", "未查询到数据"),
    _9002("9002", "参数有误"),
    _9003("9003", "您的账号在别的地方登陆，请重新登陆"),
    _9004("9004", "执行删除失败"),
    _9005("9005", "执行更新失败"),
    _9006("9006", "没有通过id找到数据"),
    _9007("9007", "已屏蔽过，不需进行重复操作"),
    _9008("9008", "添加数据失败"),
    _9009("9009", "没有通过缓存的对象找到组织"),
    _9010("9010", "登录失败，请重新登录"),
    _9011("9011", "选择组织失败，请重新选择"),
    _9012("9012", "资料库名称已存在，请重新输入"),
    _9013("9013", "被邀请的人已经加入该资料库"),
    _9014("9014", "转让群主之后再退出"),
    _9015("9015", "执行查询失败"),
    _10000("10000", "{}");

    private final String code;// 状态码
    private final String desc;// 状态码描述

    StatusInfo(String code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    public String code() {
        return code;
    }

    public String desc() {
        return desc;
    }

    /**
     * *
     * 根据code获取描述
     *
     * @param code
     * @return
     */
    public static String getDesc(String code) {

        for (StatusInfo info : StatusInfo.values()) {
            if (code.equals(info.code)) {
                return info.desc;
            }
        }
        return null;
    }

    /**
     * 根据当前code与指定的desc生成CodeDescPair
     *
     * @param defineDesc
     * @return
     */
    public CodeDescPair genStatusInfo(String defineDesc) {
        if (defineDesc != null && !("".equals(defineDesc))) {
            return new CodeDescPair(this.code, defineDesc);
        }
        return new CodeDescPair(this.code, this.desc);
    }

    /**
     * 根据当前的code、desc生成CodeDescPair
     *
     * @return
     */
    public CodeDescPair genStatusInfo() {
        return new CodeDescPair(this.code, this.desc);
    }

    @Override
    public String toString() {
        return this.code + " ：" + this.desc;
    }

    /**
     * 根据数据库中的交易状态字符串生成枚举的交易状态
     *
     * @param status
     * @return
     */
    public static StatusInfo getSIByStr(String status) {
        StatusInfo[] si = StatusInfo.values();
        for (StatusInfo statusInfo : si) {
            if (status.equals(statusInfo.code())) {
                return statusInfo;
            }
        }
        return null;
    }
}
